package com.reflect.test;

import com.reflect.entity.Student;

import java.lang.reflect.Constructor;

/**
 * @author wzm
 * @create 2023-04-06 10:31
 */

//反射获取类构造方法
public class RefTest02 {
    public static void main(String[] args) throws Exception {
     //获取类的字节码文件
       Class clazz = Class.forName("com.reflect.entity.Student");

       //1.获取所有公开的构造方法
        Constructor[] constructors = clazz.getConstructors();
        //遍历
        for (Constructor c : constructors){
            System.out.println("c = " + c);
        }

        System.out.println("-----------------------------");

        //2.获取所有构造方法（public+private）
        Constructor[] declaredConstructors = clazz.getDeclaredConstructors();
        //遍历
        for (Constructor c1 : declaredConstructors){
            System.out.println("c1 = " + c1);
        }

        System.out.println("-----------------------------");
        //3.获取公开的构造函数
        //空参构造函数
        Constructor con1 = clazz.getConstructor();
        //三个参数的构造函数  参数需要执行参数的字节码文件
        Constructor con2 = clazz.getConstructor(int.class, String.class, int.class);
        System.out.println("con1 = " + con1);
        System.out.println("con2 = " + con2);

        System.out.println("-----------------------------");

        //4.获取构造方法 private+public
        Constructor con3 = clazz.getDeclaredConstructor(String.class, int.class);
        System.out.println("con3 = " + con3);

        //获取了构造方法后 我们需要调用构造方法才能够创建对象 调用需要使用指定方法

    }

}
